跳至主要内容

Docker 2.0

目錄

  • 認識docker
  • docker 基本指令
  • nginx實作
  • 使用docker compose架設Mysql

前言

什麼是docker


docker的架構及原理

https://philipzheng.gitbook.io/docker_practice/
(參考文件)


docker的基本概念

  • 映像檔(Image)
  • 容器(Container)
  • 倉庫(Repository)

映像檔(Image) Docker 映像檔就是一個唯讀的模板。 映像檔可以用來建立 Docker 容器。


容器(Container) 容器是從映像檔建立的執行實例。 Docker 利用容器來執行應用。 可以被啟動、開始、停止、刪除。 每個容器都是相互隔離的、保證安全的平台。


倉庫(Repository) 倉庫是集中存放映像檔檔案的場所。 每個倉庫中又包含了多個映像檔。 每個映像檔有不同的標籤(tag)。 倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。


docker概念圖

image


docker跟虛擬機的差別

image


docker基本指令

參考文件: https://ithelp.ithome.com.tw/articles/10199339
官方資料: https://docs.docker.com/engine/install/ubuntu/


安裝docker(ubuntu) 先更改docker在apt中下載位置

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

使用apt下載官方docker 請不要使用podman會爛掉

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

可以打打看,看看裡面有什麼

docker images

如果跳出這個就請具續做下去

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

如果沒有跳出這個問題那請跳到再來的部分


檢查一下自己的環境是wsl還是wsl2

有可能自己的環境是wsl2但是因為是wsl升上去的有可能要修config


在/etc/wsl.conf 裡加上這兩行就會改變原本的執行方式

sudo nano /etc/wsl.conf 
[boot]
systemd=true

不知道大家還記不記得啊!
nano存檔ctrl+s
nano離開ctrl+x


再來我們上禮拜是自己寫一個images
那我們這禮拜來架服務


首先先到docker hub上找個順眼的images
https://hub.docker.com/

我們這邊就用nginx來做示範


到這邊搜尋nginx
image


選個最多人用的
image


點這個tag裡面會有
image


最後一版的images可以使用按旁邊的複製 image

docker pull nginx:stable-alpine3.17-slim

再回到我們的wsl貼上就能把images pull 進電腦 這時候可以用來檢查裡面有沒成功pull進來

docker images

再來我們要把剛剛pull 的images run起來

docker run -d -p 80:80  --name nginx nginx:stable-alpine3.17-slim
  • -d 是在背景執行
  • -p 是指在哪個port運行,左邊是wsl的port,右邊是docker裡的port
  • nginx:stable-alpine3.17-slim是images的名稱

要看現在有什麼docker在執行可以用這個

docker ps -a

大家可以到自己外面的主機的瀏覽器上看 (http://127.0.0.1/)


如果要停一個服務

docker stop nginx

相對的要繼續就~

docker start nginx

刪除一個容器

docker rm nginx

以上的nginx都可以換成CONTAINER ID


Docker compose + mql


什麼是docker compose

Docker Compose 是用來定義和執行多容器Docker 應用程式的工具。

參考資料1: https://yhtechnote.com/what-is-docker-compose/

參考資料2: https://dev.to/devkiran/mysql-phpmyadmin-docker-compose-54h7

SQLkeyword: https://hub.docker.com/_/mysql


首先先創一個資料夾

mkdir mql

cd 進mql資料夾

cd ./mql

創一個叫docker-compose.yml的檔案

(名字很重要)

nano docker-compose.yml

再把這一串複製進去

version: "3"

services:
# Database
db:
platform: linux/x86_64
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: yourdb
MYSQL_PASSWORD: password
networks:
- mysql-phpmyadmin

# phpmyadmin
phpmyadmin:
depends_on:
- db
image: phpmyadmin
restart: always
ports:
- "8090:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: password
networks:
- mysql-phpmyadmin

networks:
mysql-phpmyadmin:

volumes:
db_data:

重要句子解釋

  • version: "3" =compose file 的版本
  • image: mysql:5.7 =使用什麼image去run(無須自己pull進來在執行docker-compose.yml的檔案時就會自動去下載及pull)
  • volumes: - db_data:/var/lib/mysql = 在wsl端及docker內部的資料夾做映射(左邊是外部右邊是內部,外部資料夾不用自己新增)
  • ports:- "3306:3306" =與之前docker run 的時候一樣要把裡面的port跟外面的port做對接

  • environment: MYSQL_ROOT_PASSWORD: password
    MYSQL_DATABASE: yourdb
    MYSQL_PASSWORD: password
    = root的密碼、database的名稱、使用者的密碼
  • networks:
    - mysql-phpmyadmin  
    = 要把phpmyadmin跟Mysql放在同一個網路內不然沒辦法互連
  • depends_on:- db = 要關於上面的db資料庫
    (不然他不知道要用哪個資料庫)

  • networks: mysql-phpmyadmin:
    volumes: db_data: = 類似於做宣告的部分,有宣告才可以引用網路及不用新增一個新的外部資料夾就可以做到前面提到的映射

把docker compose 跑起來

docker compose up -d

把docker compose 停下來

docker compose stop 

千萬不要打下面這個

docker compose down 

因為這是把docker compose刪了的意思


大家可以跑跑看

http://127.0.0.1:8090/
帳號:root
密碼:password


今天就到這